/*
 * XMLElement.h
 *
 *  Created on: 16 mars 2011
 *      Author: bmaillot
 */

#ifndef XMLELEMENT_H_
#define XMLELEMENT_H_

#include <string>
#include <vector>
#include <map>
#include "XMLNode.h"
#include "../commun.h"

class XMLElement: public XMLNode
{
	protected :
		std::string nodeName;
		AttList attributes;
		std::vector<XMLNode*> childList;
	public :
		XMLElement(std::string nodeName);
		/**
		 * Construit un nouvel élèment XML.
		 */

		~XMLElement();
		/**
		 * Destructeur.
		 */

		void addAttribute(std::string attName, std::string attValue = "");
		/**
		 * Ajoute un attribut sur l'élèment
		 * Si l'attribut existe déjà, il est écrasé par la nouvelle valeur.
		 */

		void setAttributes(AttList &attr);
		/*
		 * Ajout des attributs une fois.
		 */

		void addChild(XMLNode* child);
		/**
		 * Ajoute un élèment enfant
		 */

		std::vector<XMLNode*> getChildList();
		/**
		 * Récupère la liste des enfants
		 */

		std::string toString();
		/**
		 * Exporte l'élèment sous forme de chaîne de caractères
		 */

		std::string attributesToString();
		/**
		 * Crée un string des attributs au format suivant :
		 * 		a="val1" b="val2"
		 */

		std::string getAttribute(std::string attributeName);
		/**
		 * Récupère le contenu d'un attribut
		 */

		AttList getAttributes();
		/**
		 * Récupère la liste des attributs de l'élément sous une structure AttList
		 */

		std::string getNodeName();
		/**
		 * Renvoie le nom de l'élèment
		 */

};


#endif /* XMLELEMENT_H_ */
